perm filename LEVEL2.SAI[4,ALS] blob sn#202977 filedate 1976-02-23 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "LEVEL2"
C00010 ENDMK
C⊗;
BEGIN "LEVEL2"
DEFINE ⊂="COMMENT";  ⊂ 8/16/73 FIRST DRAFT;
PROCEDURE LEVEL2;
BEGIN "LEV"
⊂ This procedure accumulates statistics on adjacency probabilities
   for segment types during the training stage and uses these apriori
   values to modify the individual estimates during use;
⊂ Probabilities are expressed in parts per 512;

EXTERNAL STRING NU;
EXTERNAL INTEGER N,CFLAG,SEGC,FLAG;
DEFINE TABNUM="16";
EXTERNAL INTEGER ARRAY NAMES,CMAX,OUT1,OUT2,OUT3,OUT4[0:TABNUM];
EXTERNAL INTEGER ARRAY HINTS[0:31];
INTEGER I,J,K,L,M,Q;
INTEGER BSTCNT,BSTHNT;
INTEGER ARRAY HINT2,DUR2,SEGC2,TMP,CNT[0:31];
INTEGER ARRAY CMAX2[0:16,0:31];
INTEGER ARRAY BESTN,BESTP[0:7,0:31]; ⊂ Names and prob.values for the
   n best choices, kept ordered by sort after the initial merge;
INTEGER ARRAY CONTEX[0:63,0:63];  ⊂ Sums accumulated in right half
   and adjacency conditional probabilities in 2 fields in left half;
INTEGER ARRAY PROB[0:63]; ⊂ The a priori probabilities of features;


PROCEDURE MERGE;
BEGIN "MERGE"  ⊂ used to keep values ordered as they are accumulated;
INTEGER K;

BESTP[7,N]←J; BESTN[7,N]←L;
FOR K←7 STEP -1 UNTIL 1 DO IF BESTP[K,N]> BESTP[K-1,N] THEN BEGIN
  L←BESTN[K-1,N]; BESTN[K-1,N]←BESTN[K,N]; BESTN[K,N]←L;
  J←BESTP[K-1,N]; BESTP[K-1,N]←BESTP[K,N]; BESTP[K,N]←J; END
  ELSE DONE;
END "MERGE";


PROCEDURE SORT;  
BEGIN "SORT"  ⊂ used to reorder values after adjacency corrections;
INTEGER I,J,K;

FOR I←0 STEP 1 UNTIL 6 DO
  FOR J←I+1 STEP 1 UNTIL 7 DO IF BESTP[I,N]< BESTP[J,N] THEN BEGIN
    K←BESTN[I,N]; BESTN[I,N]←BESTN[J,N]; BESTN[J,N]←K;
    K←BESTP[I,N]; BESTP[I,N]←BESTP[J,N]; BESTP[J,N]←K; END;
END "SORT";


PROCEDURE SETUP;
BEGIN "SETUP"  ⊂ computes direct and adjacency probabilities;
INTEGER I,J,K,ISUM,JSUM,SUM;

SUM←0;
FOR I←0 STEP 1 UNTIL 63 DO SUM←SUM+PROB[I] LAND '777777;
FOR I←0 STEP 1 UNTIL 63 DO BEGIN
  J←PROB[I] LAND '777777; K←J*512%SUM; IF K>511 THEN K←511;
   PROB[I]←J+(K LSH 27); END;

FOR I←0 STEP 1 UNTIL 63 DO BEGIN
  JSUM←0;
  FOR J←0 STEP 1 UNTIL 63 DO JSUM←JSUM+CONTEX[I,J] LAND '777777;
  FOR J←0 STEP 1 UNTIL 63 DO BEGIN
    K←((CONTEX[I,J] LAND '777777)*512)%JSUM;
    IF K>511 THEN K←511;
    CONTEX[I,J]←(CONTEX[I,J] LAND '777777777)+(K LSH 27);
    END;
  END;

FOR J←0 STEP 1 UNTIL 63 DO BEGIN
  ISUM←0;
  FOR I←0 STEP 1 UNTIL 63 DO ISUM←CONTEX[I,J] LAND '777777;
  FOR I←0 STEP 1 UNTIL 63 DO BEGIN
    K←((CONTEX[I,J] LAND '777777)*512)%ISUM;
    IF K>511 THEN K←511;
    CONTEX[I,J]←( CONTEX[I,J] LAND '777000777777)+(K LAND 18);
    END;
  END;
END "SETUP";


IF CFLAG≠0 THEN BEGIN "CFLAG"   ⊂ to proceess another segment;
FOR J←0 STEP 1 UNTIL 7 DO BESTP[J,N]←0;
 SEGC2[N]←SEGC; DUR2[N]←SEGC2[N]-SEGC2[N-1];
 FOR I←0 STEP 1 UNTIL TABNUM-1 DO  BEGIN
   IF NAMES[I]=0 THEN DONE;
   FOR J←0 STEP 1 UNTIL 7 DO BEGIN
     IF (J←LDB(POINT(9,CMAX[I],8)))>BESTP[7,N] THEN BEGIN
       L←OUT1[I]; MERGE; END;
       
     IF (J←LDB(POINT(9,CMAX[I],17)))>BESTP[7,N] THEN BEGIN
       L←OUT2[I]; MERGE; END;
     IF (J←LDB(POINT(9,CMAX[I],26)))>BESTP[7,N] THEN BEGIN
       L←OUT3[I]; MERGE; END;
     IF (J←LDB(POINT(9,CMAX[I],35)))>BESTP[7,N] THEN BEGIN
       L←OUT4[I]; MERGE; END;
     END;
   END;

IF FLAG=-1 THEN BEGIN "FLAG-1"
  L←0; TMP[L]←HINTS[DUR2[N]];
  FOR J← DUR2[N] STEP -1 UNTIL 0 DO 
    IF HINTS[J]=TMP[L] THEN CNT[L]←CNT[L]+1 ELSE BEGIN
      L←L+1; CNT[L]←1; TMP[L]←HINTS[J]; END;
  BSTHNT←BSTCNT←0;
  FOR J←L STEP -1 UNTIL 0 DO
    IF CNT[J]>BSTCNT THEN BEGIN BSTCNT←CNT[J]; BSTHNT←TMP[J]; END;
HINT2[N]←BSTHNT;
J←HINTS[N-1]; K←BSTHNT; PROB[K]←PROB[K]+1;
CONTEX[J,K]←CONTEX[J,K]+1;
  END "FLAG-1";

IF FLAG=1 THEN IF N>1 THEN BEGIN "FLAG1"    ⊂ correct for context;

  FOR I←0 STEP 1 UNTIL 7 DO BEGIN
    K←BESTN[I,N-1];
    Q←LDB(POINT(9,PROB[K],8));
    FOR J←0 STEP 1 UNTIL 7 DO BEGIN  ⊂ backward adjustment;
      L←BESTN[J,N];
      M←LDB(POINT(9,CONTEX[K,L],8));
      BESTP[I,N-1]← BESTP[I,N-1]+
       ((1-BESTP[I,N-1])*(((M*BESTP[J,N]) LSH -9)-Q) LSH -9);
  END; END; SORT;

  FOR J←0 STEP 1 UNTIL 7 DO BEGIN
    L←BESTN[J,N];
    Q←LDB(POINT(9,PROB[L],17));
    FOR I←0 STEP 1 UNTIL 7 DO BEGIN  ⊂ forward adjustment;
      K←BESTN[I,N-1];
      M←LDB(POINT(9,CONTEX[K,L],17));
      BESTP[J,N]←BESTP[J,N]+
       ((1-BESTP[J,N])*(((M*BESTP[I,N-1]) LSH -9)-Q) LSH -9);
  END; END; SORT;

END "FLAG1";
 N←N+1;
END "CFLAG";



END "LEV";
END "LEVEL2";

⊂ ************I;
⊂ PUT IN SAY ;
⊂ AT 401/2;
⊂ HINTS[HCNT]←J;
⊂ HCNT←HCNT+1;